package com.xwx.common.controller;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import org.apache.log4j.Logger;
import com.jfinal.core.Controller;
import com.jfinal.ext.render.CaptchaRender;
import com.jfinal.kit.PathKit;
import com.jfinal.kit.PropKit;
import com.jfinal.kit.StrKit;
import com.jfinal.render.JsonRender;
import com.jfinal.upload.UploadFile;
import com.xwx.common.model.AnnexModel;
import com.xwx.common.model.RoleModel;
import com.xwx.common.model.UserModel;
import com.xwx.common.utils.DateUtils;
/**
* @Description:基础Controller
* @author:Dream QQ:68697015
* @time:2015年8月14日 下午3:14:36
 */
public class BaseController extends Controller{
	/**
	 * 
	 * 全局日志
	 */
	protected Logger log=Logger.getLogger(getClass());
	/**
	 * 是否开启token,默认关闭
	 */
	protected boolean isToKen=false;
	/**
	 * token失效时间
	 * 默认5秒
	 */
	protected int tokenTime=5;
	/**
	 * token_key
	 */
	protected String TOKEN_KEY="app_token";
	/**
	 * Json返回状态
	 * 0执行成功
	 * 1失败
	 */
	public static final int JSON_FLAG=0;
	/**
	 * Json返回字符串，配套JSON_FLAG使用
	 */
	public static final String JSON_MSG="操作成功";
	//-----------------------------------------------------------------------------------------------
	
	
	/**
	 * 保存session
	 * @param UserModel
	 */
	public void setSessionUserModel(UserModel um){
		setSessionAttr(PropKit.get("userSessionKey"), um);
	}
	/**
	 * 取session中的UserModel
	 * @return um
	 */
	public UserModel getSessionUserModel(){
		UserModel um = getSessionAttr(PropKit.get("userSessionKey"));
		if(um==null){
			throw new NullPointerException("session会话已过期或无session");
		}else{
			return um;
		}
	}
	/**
	 * 取session中UserModel的主键
	 * @return str
	 */
	public String getSeesionUserId(){
		return getSessionUserModel().getStr("id");
	}
	/**
	 * 查询当前用户所拥有的角色信息
	 * @return list
	 */
	public List<RoleModel> getCureenUserRoles(){
		return UserModel.queryUserRoles(getSeesionUserId());
	}
	/**
	 * 获取当前页
	 * @return int
	 */
	public int getPageSize() {
		int pageNumber=1;
		if(StrKit.notBlank(getPara("page")))pageNumber=getParaToInt("page");
		log.info("当前页："+pageNumber);
		return pageNumber;
	}
	/**
	 * 获取每页记录总数
	 * @return int
	 */
	public int getRowsSize() {
		int rows=20;
		if(StrKit.notBlank(getPara("rows")))rows=getParaToInt("rows");
		log.info("每页数："+rows);
		return rows;
	}
	/**
	 * 默认Json输出，一般用于执行后，返回
	 * flag状态:0操作成功，1产生错误/操作失败，2session失效
	 */
	public void renderJson(){
		renderJson(JSON_FLAG, JSON_MSG);
	}
	/**
	 * 自定义Json输出
	 * @param flag 操作符
	 * @param msg 具体内容
	 */
	public void renderJson(int flag,Object msg){
		Map<String,Object>json=new HashMap<String,Object>();
		json.put("flag", flag);
		json.put("msg", msg);
		this.render(new JsonRender(json).forIE());//解决IE中JSON提示下载		
	}
	/**
	 * 生成验证码
	 */
	public void buiderValidataCode(){
		CaptchaRender cr = new CaptchaRender(PropKit.get("valRandomCode"));
		render(cr);
	}
	/**
	 * 用于验证验证码
	 * @param inputValidataCode 输入的验证码
	 * @return true 验证成功
	 */
	public boolean validateCodeCheck(String inputValidataCode){
		String randomCodeKey=getCookie(PropKit.get("valRandomCode"));
		return CaptchaRender.validate(this, inputValidataCode, randomCodeKey);
	}
	/**
	 * 文件上传
	 */
	public void uploadFile()throws Exception{
		String path=DateUtils.getDateSimple();
		List<UploadFile> files=getFiles();
		for (UploadFile file : files) {
			AnnexModel annex = new AnnexModel();
			File source=file.getFile();
			String fileName = file.getFileName();
			annex.set("name",fileName);
			String prefix=fileName.substring(fileName.indexOf("."), fileName.length());//扩展名
			annex.set("ext",prefix);
			String newFileName=new Random().nextLong()+prefix;//新文件名
			FileInputStream fis = new FileInputStream(source);
			File targetDir = new File(PathKit.getWebRootPath() +PropKit.get("uploadFile")+ path);
			annex.set("filePath", targetDir+"/"+newFileName);
			annex.set("size",file.getFile().length());
			if (!targetDir.exists()) {
				targetDir.mkdirs();
				}
			File target = new File(targetDir, newFileName);
			if (!target.exists()) {
			target.createNewFile();
			}
			FileOutputStream fos = new FileOutputStream(target);
			byte[] bts = new byte[300];
			while (fis.read(bts, 0, 300) != -1) {
			fos.write(bts, 0, 300);
			}
			fos.close();
			fis.close();
			annex.save();
			
		}
	}
	/**
	 * 文件下载
	 */
	public void downFile(){
		String path = getPara(0);
		String filePath=PathKit.getWebRootPath()+PropKit.get("uploadFile")+path;
		renderFile(filePath);
	}
}
